package com.yuw.model.impl;

import com.yuw.bean.AdminInfoBean;
import com.yuw.dao.IAdminInfoDao;
import com.yuw.model.IAdminManagerModel;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * 使用service注解标注该类是以一个业务逻辑层的实现类；
 * Service告诉jvm，这是一个可以进行new创建的实例对象类（spring bean）
 */
@Service("adminM")
public class AdminManagerModelImpl implements IAdminManagerModel {
    // 依赖注入（反转控制）
    // 面向接口的编程
    @Resource
    private IAdminInfoDao adminD;

    @Override
    public boolean doAdminLogin(AdminInfoBean adminB) {
        // 返回值
        boolean isLogined = false;

        // 测试是否可以查询数据库
        // 进行数据库查询操作
        AdminInfoBean adminInfoBean = adminD.select4Login(adminB);
        System.out.println("mybatis查询数据操作结果:" +
                (adminInfoBean == null ? "null" : adminInfoBean.toString()));

        // 调用DAO层进行数据库查询操作（mybatis框架）
        // 根据查询结果返回登录验证结果
        if (adminInfoBean != null && adminInfoBean.getAdminname() != null) {
            isLogined = true;
        }
        return isLogined;
    }

    @Override
    public int saveAdminInfo(AdminInfoBean adminB) {
        // 默认返回值
        int i = 0;
        /*
         保存操作，包括新增和修改操作；
         如果：实体类adminB的主键字段值不为null，则就是修改操作；
         如果实体参数adminB的主键字段值为null，则是新增操作;
         注意：如果是这样处理，则要求主键字段类型必须是包装类型或者对象类型；
         而不成是基本类型；因为基本类型的默认值不会出现null
          */
        if(adminB !=null && adminB.getAdminid() == null){
            // 新增操作
            // 调用Dao层进行数据信息保存
            i = adminD.insertSelective(adminB);
        }else{
            // 修改操作
            i = adminD.updateByPrimaryKeySelective(adminB);
        }
        return i;
    }

    @Override
    public List<AdminInfoBean> selectAllAdminInfo() {
        // 调用dao进行查询操作
        List<AdminInfoBean> lstAdminB = adminD.selectAllAdminInfo();
        return lstAdminB;
    }

    @Override
    public List<AdminInfoBean> selectAdminInfoByParams(AdminInfoBean record) {
        // 调用dao进行查询操作
        List<AdminInfoBean> lstAdminB = adminD.selectAdminInfoByParams(record);
        return lstAdminB;
    }

    @Override
    public int deleteByPrimaryKey(Long adminid) {
        // 调用dao层进行数据删除的业务逻辑操作
        int i = adminD.deleteByPrimaryKey(adminid);
        return i;
    }

    @Override
    public AdminInfoBean selectByPrimaryKey(Long adminid) {
        // 调用dao进行查询操作
        AdminInfoBean adminB = adminD.selectByPrimaryKey(adminid);
        return adminB;
    }
}
